package zsw.template;

public class TestTemplate {
	public static void main(String[] args) {
		/**
		 * 模板方法设计模式： 就是将某些流程算法给封装，具体实现细节交给子类去完成。 如：我们在spring中的模板方法，jdbcTemplate 就是
		 * 
		 * 泡茶的流程是：烧水，拿茶壶，放入茶叶，冲泡；
		 * 
		 * 泡咖啡的流程：烧水，拿咖啡壶，放入可可，冲泡。
		 * 
		 */
		DrinkTemplate s=new MakeTea();
		s.make();

	}

}

abstract class DrinkTemplate {
	abstract void boilWater();// 烧水

	abstract void getPot();// 获取容器

	abstract void putSource();// 放东西

	abstract void makeDrink();// 制作成功

	public final void make() {
		System.out.println("开始制作饮料");
		boilWater();// 烧水
		getPot();// 获取容器
		putSource();// 放东西
		makeDrink();// 制作成功
		System.out.println("制作饮料完毕");
	}
	
	public final void makes() {
		boilWater();// 烧水
		getPot();// 获取容器
		putSource();// 放东西
		makeDrink();// 制作成功
	}
}

class MakeTea extends DrinkTemplate {

	@Override
	void boilWater() {

    System.out.println("制作茶水开始烧水");

	}

	@Override
	void getPot() {
		 System.out.println("制作茶水开始拿茶壶");

	}

	@Override
	void putSource() {
		 System.out.println("制作茶水开始取茶叶");

	}

	@Override
	void makeDrink() {
		 System.out.println("制作茶水成功");

	}
	

}

class MakeCoffee extends DrinkTemplate {

	@Override
	void boilWater() {

    System.out.println("制作咖啡开始烧水");

	}

	@Override
	void getPot() {
		 System.out.println("制作咖啡开始拿咖啡壶");

	}

	@Override
	void putSource() {
		 System.out.println("制作咖啡开始取咖啡dou");
 
	}

	@Override
	void makeDrink() {
		 System.out.println("制作咖啡成功");

	}
	

}